.section tlbrentry
.globl handle_tlb_refill
.align 4

handle_tlb_refill:
    // 将 t0 保存到 CSR.TLBRSAVE 寄存器，读取 pgd 基址到 t0
	csrwr	$t0, 0x8b
	csrrd	$t0, 0x1b
    // 访问 4 级页表，读取 3 级页表基址到 t0（pgd 为 4 级页表基址）
	lddir	$t0, $t0, 3
    // 访问 3 级页表，读取 2 级页表基址到 t0
	lddir	$t0, $t0, 2
    // 访问 2 级页表，读取 1 级页表地址或大页到 t0
	lddir   $t0, $t0, 1
    // 根据 CSR.TLBRBADV 中记录的缺失虚拟地址
	// 访问 1 级页表，读取偶数号页表项到 CSR.TLBELO0
	ldpte	$t0, 0  
    // 访问 1 级页表，读取奇数号页表项到 CSR.TLBELO1
	ldpte	$t0, 1
    // 根据 CSR.TLBELO0、CSR.TLBELO1 等寄存器中信息，将页表项填入 TLB
	tlbfill
	// 恢复 CSR.TLBRSAVE 寄存器值
	csrrd	$t0, 0x8b
	// 例外返回
	ertn